﻿using System;
using System.Collections;
using System.Linq;
using System.Text;
using Proyecto7CAD;
using System.Data;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System.Configuration;
using ENProyecto7;

namespace ENProyecto7
{
    public class ENLocalizacion
    {
        // declaraciones de las variables
        private int idLocalizacion;
        private string nombreLocalizacion;
        private string descripcionLocalizacion;
        private string imagenLocalizacion;
        private string fondoLocalizacion;
        private ArrayList objetos;
        private ArrayList enemigos;
        private LocalizacionCAD obj;

        public ENLocalizacion()
        {
            idLocalizacion = 0;
            nombreLocalizacion = "";
            descripcionLocalizacion = "";
            imagenLocalizacion = "";
            fondoLocalizacion = "";
            objetos = new ArrayList();
            enemigos = new ArrayList();
            obj = new LocalizacionCAD();
        }

        // Constructor sobrecargado
        public ENLocalizacion(int newId, string newName, string newDesc = "", string newImage = "", string newBG = "")
        {
            idLocalizacion = newId;
            nombreLocalizacion = newName;
            descripcionLocalizacion = newDesc;
            imagenLocalizacion = newImage;
            fondoLocalizacion = newBG;
            obj = new LocalizacionCAD();
        }

        public int IdLocalizacion
        {
            get { return (idLocalizacion); }
            set { idLocalizacion = value; }
        }

        public string NombreLocalizacion
        {
            get { return (nombreLocalizacion); }
            set { nombreLocalizacion = value; }
        }

        public string DescripcionLocalizacion
        {
            get { return (descripcionLocalizacion); }
            set { descripcionLocalizacion = value; }
        }

        public string ImagenLocalizacion
        {
            get { return (imagenLocalizacion); }
            set { imagenLocalizacion = value; }
        }

        public string FondoLocalizacion
        {
            get { return (fondoLocalizacion); }
            set { fondoLocalizacion = value; }
        }

        public ArrayList EnemigosLocalizacion
        {
            get { return (enemigos); }
            set { enemigos = value; }
        }

        public ArrayList ObjetosLocalizacion
        {
            get { return (objetos); }
            set { objetos = value; }
        }

        //Metodos de la clase

        //Insercion de una localizacion
        public void insertarLocalizacion()
        {
            try
            {
                obj.insertarLocalizacion(nombreLocalizacion, descripcionLocalizacion, imagenLocalizacion, fondoLocalizacion);

                int ultimoID = obj.obtenerUltimoIDLocalizacion();

                foreach (ENEnemigosLocalizacion item in enemigos)
                {
                    obj.insertarEnemigoLocalizacion(ultimoID, item.IDEnemigo, item.Porcentaje);
                }

                foreach (ENObjetoLocalizacion item in objetos)
                {
                    obj.insertarObjetoLocalizacion(ultimoID, item.IDObjeto, item.Porcentaje);
                }

            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        //Devuelve la localizacion (y los enemigos/objetos asociados) que se pide por id
        public void obtenerLocalizacion()
        {
            try
            {
                DataTable tabla = obj.obtenerLocalizacion(idLocalizacion);
                nombreLocalizacion = tabla.Rows[0][1].ToString();
                descripcionLocalizacion = tabla.Rows[0][2].ToString();
                imagenLocalizacion = tabla.Rows[0][3].ToString();
                fondoLocalizacion = tabla.Rows[0][4].ToString();

                DataTable tablaenemigos = obj.obtenerEnemigoLocalizacion(idLocalizacion);
                EnemigoCAD cadenemigo = new EnemigoCAD();

                foreach(DataRow registro in tablaenemigos.Rows){
                    ENEnemigosLocalizacion item = new ENEnemigosLocalizacion();

                    item.IDEnemigo = int.Parse(registro[1].ToString());
                    item.Porcentaje = int.Parse(registro[2].ToString());
                    item.Nombre = cadenemigo.obtenerNombreEnemigo(item.IDEnemigo);

                    enemigos.Add(item);
                }

                DataTable tablaobjetos = obj.obtenerObjetoLocalizacion(idLocalizacion);
                ObjetoCAD cadobjeto = new ObjetoCAD();

                foreach (DataRow registro in tablaobjetos.Rows)
                {
                    ENObjetoLocalizacion item = new ENObjetoLocalizacion();

                    item.IDObjeto = int.Parse(registro[1].ToString());
                    item.Porcentaje = int.Parse(registro[2].ToString());
                    item.Nombre = cadobjeto.obtenerNombreObjeto(item.IDObjeto);

                    objetos.Add(item);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        //Obtiene todas las localizaciones de la base de datos
        public DataTable obtenerLocalizaciones()
        {
            try
            {
                return obj.obtenerLocalizaciones();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        //Edita una localizacion
        public void editarLocalizacion()
        {
            try
            {
                obj.editarLocalizacion(idLocalizacion, nombreLocalizacion, descripcionLocalizacion, imagenLocalizacion, fondoLocalizacion);
                //Borramos los registros en enemigoslocalizacion y objetoslocalizacion para volver a insertarlos(con los que el usuario ha añadido)
                obj.borrarEnemigosLocalizacion(idLocalizacion);
                obj.borrarObjetosLocalizacion(idLocalizacion);

                foreach (ENEnemigosLocalizacion item in enemigos)
                {
                    obj.insertarEnemigoLocalizacion(IdLocalizacion, item.IDEnemigo, item.Porcentaje);
                }

                foreach (ENObjetoLocalizacion item in objetos)
                {
                    obj.insertarObjetoLocalizacion(IdLocalizacion, item.IDObjeto, item.Porcentaje);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        //Borra una localizacion
        public void borrarLocalizacion()
        {
            try
            {
                obj.borrarLocalizacion(idLocalizacion);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        //Obtiene una localizacion por nombre o descripcion
        public DataTable obtenerLocalizacionNombre(string nom_des)
        {
            try
            {
                return obj.obtenerLocalizacionNombre(nombreLocalizacion, nom_des);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public SqlDataReader obtenerLocalizacionId()
        {
            try
            {
                return obj.obtenerLocalizacionId(idLocalizacion);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }
}
